import { Tag } from 'server/models/Tag'
import { successResponse, errorResponse } from 'server/utils/response'

export default defineEventHandler(async (event) => {
  try {

    const body = await readBody(event)
    const { name, slug, color } = body

    // 验证必需字段
    if (!name || !name.trim()) {
      return errorResponse('参数错误', '标签名称不能为空')
    }

    // 使用提供的slug或生成slug
    const tagSlug = slug && slug.trim() 
      ? slug.trim().toLowerCase()
        .replace(/\s+/g, '-')
        .replace(/[^\w\-]+/g, '')
        .replace(/\-+/g, '-')
        .replace(/^-+/, '')
        .replace(/-+$/, '')
      : name.toLowerCase()
        .replace(/\s+/g, '-')
        .replace(/[^\w\-]+/g, '')
        .replace(/\-+/g, '-')
        .replace(/^-+/, '')
        .replace(/-+$/, '')

    if (!tagSlug) {
      return errorResponse('参数错误', '标签别名不能为空')
    }

    // 验证slug格式
    if (!/^[a-z0-9-]+$/.test(tagSlug)) {
      return errorResponse('参数错误', '标签别名只能包含小写字母、数字和连字符')
    }

    // 检查slug是否已存在
    if (await Tag.isSlugExists(tagSlug)) {
      return errorResponse('创建失败', '标签别名已存在，请使用其他别名')
    }

    const tagData: any = {
      name: name.trim(),
      slug: tagSlug,
      color: color || '#1890ff'
    }

    const tagId = await Tag.createTag(tagData)
    
    // 获取创建的标签信息
    const allTags = await Tag.getTagsWithPostCount()
    const newTag = allTags.find(t => t.id === tagId)
    
    if (!newTag) {
      return errorResponse('创建失败', '无法获取创建的标签信息')
    }

    // 格式化返回数据
    const formattedTag = {
      id: newTag.id?.toString() || '',
      name: newTag.name,
      slug: newTag.slug,
      color: newTag.color || '#1890ff',
      postCount: 0,
      status: 'inactive',
      createdAt: newTag.created_at ? new Date(newTag.created_at).toISOString().split('T')[0] : '',
      updatedAt: newTag.updated_at ? new Date(newTag.updated_at).toISOString().split('T')[0] : ''
    }

    return successResponse(formattedTag, '标签创建成功')
  } catch (error) {
    console.error('创建标签失败:', error)
    return errorResponse('创建标签失败', error instanceof Error ? error.message : '未知错误')
  }
})